package is202.hrms.ejb;

import is202.hrms.entity.Forelesning;
import java.util.List;
import javax.ejb.EJBException;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;



/**
 * EJB håndterer databaseoperasjoner for Forlesning-objekter.
 * Den har ingen fields, og kan derfor ikke ha en tilstand. Dette er grunnen
 * til at den er annotert med en @Stateless-annotasjon. En Stateless-bønne kan
 * bli delt mellom flere brukere.
 *
 * @author Sondre
 */
@Stateless
public class ForelesningEJB extends AbstractFacade<Forelesning> {
    /**
     * PersistenceContext-annotasjonen er en forespørsel til containeren (Catalina
     * er Tomcat sin container) til å lage eller finne en EntityManager og lagre
     * det i en field kalt em. EntityManager-objektet blir laget uten at vi
     * trenger å skrive kode for å lage det. Dette er kalt "dependency incjection".
     */
    @PersistenceContext(unitName = "slitdb")
    private EntityManager em;

    /** Denne metoden er arvet fra AbstractFacade for å aksessere EntityManager.
     */
    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public ForelesningEJB() {
        super(Forelesning.class);
    }

    /** Metoden returnerer alle forelesningene den finner. Sjekker om en
     * forelesning eksisterer, og returnerer den i lista. Lista er indeksert,
     * og begynner på 0.
     */ 
    public Forelesning getDefaultForelesning() {
        List<Forelesning> forelesningList = findAll();
        if (forelesningList != null && forelesningList.size() > 0) {
            return forelesningList.get(0);
        } else {
            throw new IllegalStateException("Ingen tilgjenglige foreleningsforespørsler.");
        }
    }

    /** En wrapper for find() metoden i AbstractFacade. Dette er en arvet metode
     * som er tilpasset forelesning. Den  tvinger loading av forelesninger
     * på siden.
     */
    public Forelesning find(long forelesningNr) {
        Forelesning forelesning = super.find(forelesningNr);
        if (null != forelesning) forelesning.getForelesninger();
        return forelesning;
    }

    @Override
    public void delete(Forelesning forelesning) {
        forelesning = em.merge(forelesning);
        if (forelesning.getForelesninger().isEmpty()) super.delete(forelesning);
        else throw new EJBException("Kan ikke slette studenter med forelesningsforespørsler.");
    }

}
